package delay;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

import java.nio.charset.Charset;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * delay包,延迟消息
 * 延迟消息生产者，核心：发送消息时， message.setDelayTimeLevel(3)   3表示延迟10秒
 * messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
 * @author: BacHe
 * @email: 1218585258@qq.com
 * @Date: 2020/12/9 22:45
 */
public class Producer {
    public static void main(String[] args) throws Exception {
        //1.创建消息生产者 producer，并指定生产者组名 group1
        DefaultMQProducer producer = new DefaultMQProducer("group5");
        //2.指定Nameserver地址,集群用分号;隔开 。
        // （注意防火墙要开放指定端口,Nameserver端口9876 ,broker端口10911,broker要设置配置文件启动）
        producer.setNamesrvAddr("192.168.0.88:9876");
        //3.启动producer
        producer.start();

        for (int i = 0; i < 10; i++) {
            //4.创建消息对象，指定主题Topic、Tag 和消息体
            /**
             *参数1：topic主题 （大分类）
             *参数2：tag （小分类）
             *参数3：body （消息内容）
             */
            Thread.sleep(1000);
            String time = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            String body = "rocketmq 发送延迟消息 " + i + ",time:" + time;
            Message message = new Message("delay","tag1",body.getBytes(Charset.forName("UTF-8")));
            //todo 设置延迟时间级别。
            //todo messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
            message.setDelayTimeLevel(3);
            //5.发送消息,拿到返回结果.
            SendResult result = producer.send(message);
            System.out.println(result);
            //睡一下，看到有节奏的输出。
        }
        //6.关闭生产者producer
        producer.shutdown();
    }
}
